// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
import * as vscode from "vscode";
import { CreateMcpServer } from "./server";

// This method is called when your extension is activated
// Your extension is activated the very first time the command is executed
import { Server } from "http";
let server: Server | undefined;

function getServerPort(): number {
  const config = vscode.workspace.getConfiguration("code-puppeteer");
  return config.get<number>("serverPort", 9981);
}

export function activate(context: vscode.ExtensionContext) {
  // Use the console to output diagnostic information (console.log) and errors (console.error)
  // This line of code will only be executed once when your extension is activated
  console.log(
    'Congratulations, your extension "code-puppeteer" is now active!'
  );

  // Start server with configured port
  const port = getServerPort();
  server = CreateMcpServer(port);

  // Listen for configuration changes
  context.subscriptions.push(
    vscode.workspace.onDidChangeConfiguration((e) => {
      if (e.affectsConfiguration("code-puppeteer.serverPort")) {
        // Restart server with new port
        server?.close();
        const newPort = getServerPort();
        server = CreateMcpServer(newPort);
        console.log(`Server restarted on port ${newPort}`);
      }
    })
  );

  // The command has been defined in the package.json file
  // Now provide the implementation of the command with registerCommand
  // The commandId parameter must match the command field in package.json
  const disposable = vscode.commands.registerCommand(
    "code-puppeteer.helloWorld",
    () => {
      // The code you place here will be executed every time your command is executed
      // Display a message box to the user
      vscode.window.showInformationMessage("Hello World from Code Puppeteer!");
    }
  );

  context.subscriptions.push(disposable);
}

// This method is called when your extension is deactivated
export function deactivate() {
  server?.close();
}
